001 /**
002 * Created by IntelliJ IDEA.
003 * User: Wei Wang
004 * Date: Apr 1, 2003
005 * Time: 7:38:54 PM
006 */
007
008 package EVolve.util.phasedetectors;
009
010 import EVolve.visualization.AxesPanel;
011 import EVolve.util.phasedetectors.phasedetectorUI.PhaseDetectorToolBarState;
012 import EVolve.Scene;
013
014 import java.util.*;
015 import java.awt.*;
016
017 public abstract class PhaseDetector {
018 protected int interval;
019 protected ArrayList data;
020 protected ArrayList phase;
021 protected PhaseDetectorToolBarState toolbarState;
022 protected ArrayList undoList;
023
024 public PhaseDetector() {
025 interval = 1;
026 data = new ArrayList();
027 phase = new ArrayList();
028 undoList = new ArrayList();
029 initialToolbarState();
030 }
031
032 public PhaseDetector(int interval) {
033 this();
034 this.interval = interval;
035 }
036
037 public void reset() {
038 data.clear();
039 phase.clear();
040 undoList.clear();
041 }
042
043 public void drawPhase(AxesPanel panel) {
044 if (data.size() > 0) {
045 generatePhases();
046 }
047
048 panel.setPhases(phase);
049 }
050
051 public ArrayList getPhase() {
052 return phase;
053 }
054
055 public void addPhaseManually(int added) {
056 undoList.add(new Integer(added));
057 }
058
059 public void removePhaseManually(int removed) {
060 boolean found = false;
061 for (int i=0; i<phase.size(); i++) {
062 Integer aPhase = (Integer)phase.get(i);
063 if (aPhase.intValue() == removed) {
064 found = true;
065 break;
066 }
067 }
068
069 if (!found) return;
070
071 undoList.add(new Integer(-1*removed));
072 }
073
074 public void pastePhases(ArrayList pasted) {
075 undoList.add(pasted);
076 }
077
078 public void undo() {
079 if (undoList.size() == 0) return;
080
081 undoList.remove(undoList.size()-1);
082 }
083
084 public boolean undoable() {
085 return undoList.size() != 0;
086 }
087
088 public PhaseDetectorToolBarState getToolBarState() {
089 return toolbarState;
090 }
091
092 public void updateToolBarState() {
093 Scene.getUIManager().getPhaseDetectorToolBar().updateToolBarState(toolbarState);
094 }
095
096 protected abstract void refreshDetectorParameters();
097
098 public abstract void saveSetting();
099
100 public abstract String getName();
101
102 public abstract void collectData(long xMappedId, long yMappedId);
103
104 public abstract Component[] createDetectorParamsControls();
105
106 public abstract void triggerPhases(int noiseTolerance);
107
108 protected abstract void autoDetectPhase();
109
110 protected abstract void generatePhases();
111
112 protected abstract void initialToolbarState();
113 }